package com.example.demo.controller;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.common.response.ResponsePage;
import com.example.demo.common.response.ResponseResult;
import com.example.demo.entity.Menu;
import com.example.demo.entity.RoleMenuPermissionDto;
import com.example.demo.entity.User;
import com.example.demo.entity.VO.Announcement;
import com.example.demo.entity.param.AnnouncementParam;
import com.example.demo.entity.param.UserMenuParam;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import com.example.demo.util.JwtUtil;
import com.example.demo.util.MemberUtil;
import com.example.demo.util.YunOxTools;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController    //该注解为组合注解，等同于Spring中@Controller+@ResponseBody注解
//接口路由/user
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;
    @Resource
    private UserMapper userMapper;

    @PostMapping("/login")
    public ResponseResult login(@RequestBody User user) {
        String token = userService.login(user);
        return ResponseResult.success(token);
    }

    //获取用户类型 -> 判断是否是管理员
    @PostMapping("/getUserType")
    public ResponseResult getUserType() {
        Long userId = MemberUtil.getUserId();
        Integer count = userMapper.getUserRole(userId);
        boolean value = count > 0;
        return ResponseResult.success(value);
    }

    @PostMapping("/getUserInfo")
    public ResponseResult getUserInfo() {
        return ResponseResult.success(userMapper.selectUserById(MemberUtil.getUserId()));
    }

    @PostMapping("/register")
    public ResponseResult register(@RequestBody User user) {
        String token = userService.register(user);
        return ResponseResult.success(token);
    }

    @PostMapping("/checkForget")
    public ResponseResult checkForget(@RequestBody User user) {
        User exitsUser = userMapper.checkForget(user);
        if (exitsUser == null) {
            return ResponseResult.failed("用户信息不正确");
        }
        return ResponseResult.success(exitsUser);
    }


    // 新增接口
    @PostMapping("/save")
    public ResponseResult save(@RequestBody User user) {
        if (user.getPassword() == null) {
            user.setPassword("123456");
        }
        userService.save(user);
        return ResponseResult.success();
    }

    /*更新*/

    @PostMapping("/updateUserInfo")
    public ResponseResult updateUserInfo(@RequestBody User user) {
        userService.updateUserInfo(user);
        return ResponseResult.success();
    }

    @PostMapping("/updateRoleMenu")
    public ResponseResult updateRoleMenu(@RequestBody UserMenuParam menuParam) {
        userService.updateRoleMenu(menuParam);
        return ResponseResult.success();
    }


    @DeleteMapping("/delete/{id}")
    public ResponseResult update(@PathVariable Long id) {
        userService.removeById(id);
        return ResponseResult.success();
    }


    //查询接口
    @PostMapping("/getUserList")
//    多少页，每页多少条,分页模糊查询
    public ResponseResult findPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                   @RequestParam(defaultValue = "10") Integer pageSize,
                                   @RequestParam Integer type) {
        ResponsePage<User> userPage = userService.getUserList(pageNum,pageSize,type);
        return ResponseResult.success(userPage);
    }
    @PostMapping("/batchDelete")
//    批量删除
    public ResponseResult batchDelete(@RequestBody List<Long> userlist) {
       userService.batchDelete(userlist);
        return ResponseResult.success("删除成功");
    }

    //添加用户
    @PostMapping("/addUser")
    public ResponseResult addUser(@RequestBody User user) {
        userService.addUser(user);
        return ResponseResult.success("添加成功");
    }
    //添加用户为管理员
    @PostMapping("/setRoleById")
    public ResponseResult setRoleById(@RequestParam String userId) {
        userService.setRoleById(Long.valueOf(userId));
        return ResponseResult.success("修改成功");
    }
    @GetMapping("/batchAddUser")
    public ResponseResult batchAddUser() {
        userService.batchAddUser();
        return ResponseResult.success("添加成功");
    }

    /**
     * 获取当前用户菜单
     *
     * @return
     */
    @PostMapping("/getMenuRole")
    public ResponseResult getMenuRole() {
        List<RoleMenuPermissionDto> menuList = userService.getMenuRole();
        return ResponseResult.success(menuList);
    }

    /**
     * 获取所有菜单
     *
     * @return
     */
    @PostMapping("/getAllMenu")
    public ResponseResult getAllMenu() {
        List<RoleMenuPermissionDto> menuList = userService.getAllMenu();
        return ResponseResult.success(menuList);
    }

    @PostMapping("/getAnnouncementList")
    public ResponseResult getAnnouncementList(@RequestBody AnnouncementParam param) {
        ResponsePage<Announcement> menuList = userService.getAnnouncementList(param);
        return ResponseResult.success(menuList);
    }

    @PostMapping("/getMenuList")
    public ResponseResult getMenuList(@RequestParam Integer role) {
        List<Menu> menuList = userService.getMenuList(role);
        return ResponseResult.success(menuList);
    }
    /**
     *
     * // 获取宠物的基本信息（通过宠物ID查找）
     * @PostMapping("/getPetById")
     *
     * // 添加宠物
     * @PostMapping("/addPet")
     *
     *
     * // 修改宠物信息
     * @PostMapping("/updatePet")
     *
     * // 获取宠物列表（支持分页和筛选条件）
     * @PostMapping("/getPetsList")
     *
     * // 获取宠物的疫苗接种记录（通过宠物ID查找）
     * @PostMapping("/getVaccineRecordsByPetId")
     *
     * // 添加疫苗接种记录
     * @PostMapping("/addVaccineRecord")
     *
     * // 修改疫苗接种记录
     * @PostMapping("/updateVaccineRecord")
     *
     * // 获取宠物品种信息（通过品种ID查找）
     * @PostMapping("/getBreedById")
     *
     * // 添加宠物品种
     * @PostMapping("/addBreed")
     *
     * // 修改宠物品种
     * @PostMapping("/updateBreed")
     *
     * // 获取宠物的健康记录（通过宠物ID查找）
     * @PostMapping("/getHealthRecordsByPetId")
     *
     * // 添加健康记录
     * @PostMapping("/addHealthRecord")
     *
     * // 修改健康记录
     * @PostMapping("/updateHealthRecord")
     *
     * // 获取宠物的过敏记录（通过宠物ID查找）
     * @PostMapping("/getAllergyRecordsByPetId")
     *
     * // 添加过敏记录
     * @PostMapping("/addAllergyRecord")
     *
     * // 修改过敏记录
     * @PostMapping("/updateAllergyRecord")
     *
     * // 获取宠物饮食习惯（通过宠物ID查找）
     * @PostMapping("/getDietHabitsByPetId")
     *
     * // 更新宠物饮食习惯
     * @PostMapping("/updateDietHabitsByPetId")
     *
     * // 获取宠物性格特点（通过宠物ID查找）
     * @PostMapping("/getPersonalityByPetId")
     *
     * // 更新宠物性格特点
     * @PostMapping("/updatePersonalityByPetId")
     *
     * // 获取宠物的诊疗记录（通过宠物ID查找）
     * @PostMapping("/getTreatmentRecordsByPetId")
     *
     * // 添加宠物诊疗记录
     * @PostMapping("/addTreatmentRecord")
     *
     * // 修改宠物诊疗记录
     * @PostMapping("/updateTreatmentRecord")
     *
     * // 获取宠物的行为训练记录（通过宠物ID查找）
     * @PostMapping("/getTrainingRecordsByPetId")
     *
     * // 添加宠物行为训练记录
     * @PostMapping("/addTrainingRecord")
     *
     * // 修改宠物行为训练记录
     * @PostMapping("/updateTrainingRecord")
     *
     * // 获取宠物的转让记录（通过宠物ID查找）
     * @PostMapping("/getTransferRecordsByPetId")
     *
     * // 添加宠物转让记录
     * @PostMapping("/addTransferRecord")
     *
     * // 修改宠物转让记录
     * @PostMapping("/updateTransferRecord")
     *
     * // 获取宠物的健康状况报告（通过宠物ID查找）
     * @PostMapping("/getHealthReportByPetId")
     *
     * // 添加宠物健康检查报告
     * @PostMapping("/addHealthReport")
     *
     * // 修改宠物健康检查报告
     * @PostMapping("/updateHealthReport")
     *
     * // 获取宠物的营养状态（通过宠物ID查找）
     * @PostMapping("/getNutritionStatusByPetId")
     *
     * // 更新宠物营养状态
     * @PostMapping("/updateNutritionStatusByPetId")
     *
     * // 获取宠物的情绪记录（通过宠物ID查找）
     * @PostMapping("/getMoodRecordsByPetId")
     *
     * // 添加宠物情绪记录
     * @PostMapping("/addMoodRecord")
     *
     * // 修改宠物情绪记录
     * @PostMapping("/updateMoodRecord")
     *
     * // 获取宠物的训练状态（通过宠物ID查找）
     * @PostMapping("/getTrainingStatusByPetId")
     *
     * // 更新宠物训练状态
     * @PostMapping("/updateTrainingStatusByPetId")
     *
     * // 获取宠物的行为问题记录（通过宠物ID查找）
     * @PostMapping("/getBehaviorIssuesByPetId")
     *
     * // 添加宠物行为问题记录
     * @PostMapping("/addBehaviorIssueRecord")
     *
     * // 修改宠物行为问题记录
     * @PostMapping("/updateBehaviorIssueRecord")
     *
     * // 获取宠物的过度肥胖记录（通过宠物ID查找）
     * @PostMapping("/getObesityRecordsByPetId")
     *
     * // 添加宠物过度肥胖记录
     * @PostMapping("/addObesityRecord")
     *
     * // 修改宠物过度肥胖记录
     * @PostMapping("/updateObesityRecord")
     *
     * // 获取宠物的定期体检记录（通过宠物ID查找）
     * @PostMapping("/getCheckupRecordsByPetId")
     *
     * // 添加宠物定期体检记录
     * @PostMapping("/addCheckupRecord")
     *
     * // 修改宠物定期体检记录
     * @PostMapping("/updateCheckupRecord")
     *
     * // 获取宠物的行为管理记录（通过宠物ID查找）
     * @PostMapping("/getBehaviorManagementByPetId")
     *
     * // 添加宠物行为管理记录
     * @PostMapping("/addBehaviorManagement")
     *
     * // 修改宠物行为管理记录
     * @PostMapping("/updateBehaviorManagement")
     *
     * // 获取宠物的医疗处方记录（通过宠物ID查找）
     * @PostMapping("/getPrescriptionByPetId")
     *
     * // 添加宠物医疗处方
     * @PostMapping("/addPrescription")
     *
     * // 修改宠物医疗处方
     * @PostMapping("/updatePrescription")
     *
     * // 获取宠物的生活质量评分（通过宠物ID查找）
     * @PostMapping("/getLifeQualityScoreByPetId")
     *
     * // 添加宠物生活质量评分
     * @PostMapping("/addLifeQualityScore")
     *
     * // 修改宠物生活质量评分
     * @PostMapping("/updateLifeQualityScore")
     *
     * // 获取宠物的紧急救护记录（通过宠物ID查找）
     * @PostMapping("/getEmergencyCareByPetId")
     *
     * // 添加宠物紧急救护记录
     * @PostMapping("/addEmergencyCare")
     *
     * // 修改宠物紧急救护记录
     * @PostMapping("/updateEmergencyCare")
     *
     * // 获取宠物的每日健康监控记录（通过宠物ID查找）
     * @PostMapping("/getDailyHealthMonitoringByPetId")
     *
     * // 添加宠物每日健康监控记录
     * @PostMapping("/addDailyHealthMonitoring")
     *
     * // 修改宠物每日健康监控记录
     * @PostMapping("/updateDailyHealthMonitoring")
     *
     */


}
